package com.zkh.myutils.io.log;

import com.zkh.myutils.system.ConfigLoader;
import com.zkh.myutils.system.LogConfigBean;

/**
 * 日志对象
 * @author zkh
 */
public class Logger {
	//日志级别
	private static final int LEVEL_DEBUG = 0;
	private static final int LEVEL_INFO = 1;
	private static final int LEVEL_WARN = 2;
	private static final int LEVEL_ERROR = 3;
	
	//日志写入操作
	public final static PrintStreamHandler psh = PrintStreamHandler.getPrintStream(new LogConfigBean(ConfigLoader.getMap("log")));
	
	/**
	 * 打印debug级别的日志
	 * @param msgs 日志信息，可多个日志一起打印
	 */
	public static void debug(Object... msgs) {
		psh.println(LEVEL_DEBUG, msgs);
	}
	
	/**
	 * 打印info级别的日志
	 * @param msgs 日志信息，可多个日志一起打印
	 */
	public static void info(Object... msgs) {
		psh.println(LEVEL_INFO, msgs);
	}
	
	/**
	 * 打印warn级别的日志
	 * @param msgs 日志信息，可多个日志一起打印
	 */
	public static void warn(Object... msgs) {
		psh.println(LEVEL_WARN, msgs);
	}
	
	/**
	 * 打印error级别的日志
	 * @param msgs 日志信息，可多个日志一起打印
	 */
	public static void error(Object... msgs) {
		psh.println(LEVEL_ERROR, msgs);
	}
	
	/**
	 * 普通日志打印，不受日志级别控制
	 * @param msgs 日志信息，可多个日志一起打印
	 */
	public static void printLog(Object... msgs) {
		psh.println(-1, msgs);
	}
	
	/**
	 * 错误流打印，不受日志级别控制
	 * @param msgs 日志信息，可多个日志一起打印
	 */
	public static void printLogError(Object... msgs) {
		psh.println(-2, msgs);
	}
	
	/**
	 * 普通打印，不受日志级别控制
	 * @param msgs 日志信息，可多个日志一起打印
	 */
	public static void println(Object... msgs) {
		psh.println(-3, msgs);
	}
	
	/**
	 * 错误流打印，不受日志级别控制
	 * @param msgs 日志信息，可多个日志一起打印
	 */
	public static void printlnError(Object... msgs) {
		psh.println(-4, msgs);
	}
	
	/**
	 * 是否包含debug级别
	 * @return
	 */
	public static boolean isDebug() {
		return psh.isLevel(LEVEL_DEBUG);
	}
	
	/**
	 * 是否包含info级别
	 * @return
	 */
	public static boolean isInfo() {
		return psh.isLevel(LEVEL_INFO);
	}
	
	/**
	 * 是否包含warn级别
	 * @return
	 */
	public static boolean isWarn() {
		return psh.isLevel(LEVEL_WARN);
	}
	
	/**
	 * 是否是error级别
	 * @return
	 */
	public static boolean isError() {
		return psh.isLevel(LEVEL_ERROR);
	}
	
	/**
	 * 接收系统打印流，当日志配置为<b>log_type=file</b>时生效。<br>
	 * 当日志启用日志文件时，只有调用Logger类来打印的信息，才能保存到文件。调用该方法后，所有System.out和System.err输出都会保存到日志文件。<br>
	 * 注意：当在一个tomcat下部署多个项目时，请勿调用该方法，这会导致日志输出异常。其它情况可调用，如：<br><ol>
	 * <li>一个tomcat下部署一个项目（可在启动监听器中调用）</li>
	 * <li>使用内嵌tomcat（myframe框架已内置，无须显式调用）</li>
	 * <li>桌面应用</li></ol>
	 */
	public static void receiveSystemPrintStream() {
		psh.receiveSystemPrintStream();
	}

	/**
	 * 关闭日志文件写相关流，当日志类型为file才有用
	 */
	public static void close() {
		//关闭相关流
		psh.close();
	}
}
